#pragma once
#include "Precompile.h"

namespace Core{
	enum EnginePlatforms { EP_DX10, EP_DX9 };

	class EngineInterface{	
	public:
		EngineInterface();

		void initialize();
		void finalize();
		virtual void run() = 0;

		InputSystemPtr 		getInputSystemPtr()		{ return m_inputSystem; }
		RenderSystemPtr		getRenderSystemPtr()	{ return m_renderSystem; }
		SoundSystemPtr		getSoundSystemPtr()		{ return m_soundSystem; }
	protected:
		EnginePlatforms			m_platform;
		Graphics::RenderMode	m_mode;

		RenderSystemPtr		m_renderSystem;
		InputSystemPtr		m_inputSystem;
		SoundSystemPtr		m_soundSystem;


		ThreadPtr 	m_renderThread,
					m_loadThread,
					m_physicsThread,
					m_soundThread;
	
		bool 	m_renderThreadRunning,
				m_soundThreadRunning,
				m_physicsThreadRunning;
	};
}

typedef boost::shared_ptr<Core::EngineInterface> EngineInterfacePtr;